#include <head.h>

typedef void *(*Fork_f)(void *);

typedef struct str_fork
{
    int pid;
    int id;
    char name[128];
} str_fork;

int fork_func(Fork_f func, void *data)
{
    if (NULL == func)
    {
        return -1;
    }
    int pid = 0;
    if (-1 == (pid = fork()))
    {
        perror("fork err");
        return -1;
    }
    // 子进程
    else if (0 == pid)
    {
        func(data);
    }
    // 父进程
    else if (0 < pid)
    {
        return pid;
    }
    return -1;
}
void *func_1(void *data)
{
    str_fork *s_2 = data;
    printf("pid = %d\n", s_2->pid);
    printf("id=%d\n", s_2->id);
    printf("name= %s\n", s_2->name);
    exit(0);
}
int main(int argc, char const *argv[])
{
    str_fork s_1={.name="张三"};
    s_1.id=10;
    s_1.pid=8888;
    fork_func(func_1,&s_1);
    return 0;
}
